package com.gemme.gemme.gwc;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import com.alibaba.fastjson.JSON;
import com.gemme.gemme.R;
import com.gemme.gemme.SearchActivity;
import com.gemme.gemme.fragment.BaseLazyFragment;
import com.gemme.gemme.home.HomeNewFragment;
import com.gemme.gemme.manager.DataManager;
import com.gemme.gemme.view.DefineLoadMoreView;
import com.gemme.gemme.view.GwcEditView;
import com.gemme.gemme.view.GwcEndView;
import com.gemme.gemme.view.StaggeredDividerItemDecoration;
import com.yanzhenjie.recyclerview.OnItemClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuClickListener;
import com.yanzhenjie.recyclerview.SwipeMenu;
import com.yanzhenjie.recyclerview.SwipeMenuBridge;
import com.yanzhenjie.recyclerview.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.SwipeMenuItem;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yanzhenjie.recyclerview.touch.OnItemMoveListener;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;


/**
 * Created by sp on 2019/7/18.
 * 首页
 */
public class GwcFragment extends BaseLazyFragment implements View.OnClickListener {

    View inflate;
    Context mContext;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        inflate = inflater.inflate(R.layout.fragment_gwc, container, false);

        mContext = GwcFragment.this.getContext();


        return inflate;
    }


    private SwipeRefreshLayout mRefreshLayout;
    private SwipeRecyclerView mRecyclerView;
    private List<String> mDataList;
    GwcAdapter mAdapter;
//gwcEditView
//gwcEndView
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.tv_eidt:
                isEdit = !isEdit;
                setEdit();
                break;

            case R.id.gwcEditView:

                break;

            case R.id.gwcEndView:
                startActivity(new Intent(mContext,ConfirmOrderActivity.class));
                break;
        }
    }

    private void setEdit() {
        if(isEdit){//编辑状态文字显示完成
            tv_eidt.setText("完成");
            gwcEditView.setVisibility(View.VISIBLE);
            gwcEndView.setVisibility(View.GONE);
        }else{//完成状态文字显示编辑
            tv_eidt.setText("编辑");
            gwcEditView.setVisibility(View.GONE);
            gwcEndView.setVisibility(View.VISIBLE);
        }
    }
    boolean isEdit = false;
    GwcEditView gwcEditView;
    GwcEndView gwcEndView;
    StaggeredDividerItemDecoration staggeredDividerItemDecoration;
    TextView tv_eidt;
    private void initView(View inflate) {
       setList();

        tv_eidt = inflate.findViewById(R.id.tv_eidt);

        tv_eidt.setOnClickListener(this);

        gwcEditView = inflate.findViewById(R.id.gwcEditView);
        gwcEndView = inflate.findViewById(R.id.gwcEndView);
        setEdit();

        gwcEditView.setOnClickListener(this);
        gwcEndView.setOnClickListener(this);
    }

    private void setList() {
        mRefreshLayout = inflate.findViewById(R.id.refresh_layout);


        mRecyclerView = inflate.findViewById(R.id.recycler_view);

        //线性布局
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
        View iv_search = inflate.findViewById(R.id.iv_search);
        //瀑布流布局
       /* StaggeredGridLayoutManager layoutManager = new
                StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);

        if(staggeredDividerItemDecoratio n == null){
            staggeredDividerItemDecoration = new StaggeredDividerItemDecoration
                    (mContext, (int) getResources().getDimension(R.dimen.dp_11));
            mRecyclerView.addItemDecoration(staggeredDividerItemDecoration);
        }*/



//        mRecyclerView.addItemDecoration(new DefaultItemDecoration(ContextCompat.getColor(this, R.color.divider_color)));

//        mRecyclerView.setOnItemClickListener(mItemClickListener);

        // 自定义的核心就是DefineLoadMoreView类。
        if(mAdapter == null){
            DefineLoadMoreView loadMoreView = new DefineLoadMoreView(mContext);
            mRecyclerView.addFooterView(loadMoreView); // 添加为Footer。
            mRecyclerView.setLoadMoreView(loadMoreView); // 设置LoadMoreView更新监听。
            mRefreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听。
            //    mRecyclerView.setLoadMoreListener(mLoadMoreListener); // 加载更多的监听。

            mRecyclerView.setOnItemMoveListener(mItemMoveListener);// 监听拖拽，更新UI。
            mRecyclerView.setItemViewSwipeEnabled(false); // 侧滑删除，默认关闭。
//        recyclerView.setLongPressDragEnabled(false); // 拖拽排序，默认关闭。
            mRecyclerView.setSwipeMenuCreator(mSwipeMenuCreator); // 菜单创建器。
            mRecyclerView.setOnItemMenuClickListener(mItemMenuClickListener); // Item的Menu点击。

            mAdapter = new GwcAdapter();
            mRecyclerView.setAdapter(mAdapter);

            // 请求服务器加载数据。
            loadData();
        }

    }

    private OnItemMenuClickListener mItemMenuClickListener = new OnItemMenuClickListener() {
        @Override
        public void onItemClick(SwipeMenuBridge menuBridge, int position) {
            menuBridge.closeMenu();

            int direction = menuBridge.getDirection(); // 左侧还是右侧菜单。
            int menuPosition = menuBridge.getPosition(); // 菜单在RecyclerView的Item中的Position。

            if (direction == SwipeRecyclerView.RIGHT_DIRECTION) {
                Toast.makeText(mContext, "list第" + position + "; 右侧菜单第" + menuPosition, Toast.LENGTH_SHORT)
                        .show();
            } else if (direction == SwipeRecyclerView.LEFT_DIRECTION) {
                Toast.makeText(mContext, "list第" + position + "; 左侧菜单第" + menuPosition, Toast.LENGTH_SHORT)
                        .show();
            }
        }
    };


    private SwipeMenuCreator mSwipeMenuCreator = new SwipeMenuCreator() {
        @Override
        public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int position) {
            int width = getResources().getDimensionPixelSize(R.dimen.dp_70);

            // 1. MATCH_PARENT 自适应高度，保持和Item一样高;
            // 2. 指定具体的高，比如80;
            // 3. WRAP_CONTENT，自身高度，不推荐;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;

         /*   // 添加左侧的，如果不添加，则左侧不会出现菜单。
            {
                SwipeMenuItem addItem = new SwipeMenuItem(getBaseContext()).setBackground(
                        R.drawable.selector_green).setImage(R.drawable.ic_action_add).setWidth(width).setHeight(height);
                swipeLeftMenu.addMenuItem(addItem); // 添加一个按钮到左侧菜单。

                SwipeMenuItem closeItem = new SwipeMenuItem(getBaseContext()).setBackground(
                        R.drawable.selector_red).setImage(R.drawable.ic_action_close).setWidth(width).setHeight(height);

                swipeLeftMenu.addMenuItem(closeItem); // 添加一个按钮到左侧菜单。
            }*/

            // 添加右侧的，如果不添加，则右侧不会出现菜单。
            {
                SwipeMenuItem deleteItem = new SwipeMenuItem(mContext).setBackground(
                        R.drawable.selector_red)
                        .setImage(R.drawable.ic_action_delete)
                        .setText("删除")
                        .setTextColor(Color.WHITE)
                        .setWidth(width)
                        .setHeight(height);
                swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。

                SwipeMenuItem closeItem = new SwipeMenuItem(mContext).setBackground(
                        R.drawable.selector_purple).setImage(R.drawable.ic_action_close).setWidth(width).setHeight(height);
                swipeRightMenu.addMenuItem(closeItem); // 添加一个按钮到右侧菜单。
            }
        }
    };


    OnItemMoveListener mItemMoveListener = new OnItemMoveListener() {
        @Override
        public boolean onItemMove(RecyclerView.ViewHolder srcHolder, RecyclerView.ViewHolder targetHolder) {
            // 此方法在Item拖拽交换位置时被调用。
            // 第一个参数是要交换为之的Item，第二个是目标位置的Item。

            // 交换数据，并更新adapter。
            int fromPosition = srcHolder.getAdapterPosition();
            int toPosition = targetHolder.getAdapterPosition();
            Collections.swap(mDataList, fromPosition, toPosition);
            mAdapter.notifyItemMoved(fromPosition, toPosition);

            // 返回true，表示数据交换成功，ItemView可以交换位置。
            return true;
        }

        @Override
        public void onItemDismiss(RecyclerView.ViewHolder srcHolder) {
            // 此方法在Item在侧滑删除时被调用。

            // 从数据源移除该Item对应的数据，并刷新Adapter。
            int position = srcHolder.getAdapterPosition();
            mDataList.remove(position);
            mAdapter.notifyItemRemoved(position);
        }
    };


    public static class GwcAdapter extends RecyclerView.Adapter<GwcAdapter.ViewHolder>{
        private List<String> mDataList;

        public void notifyDataSetChanged(List<String> dataList) {
            this.mDataList = dataList;
            super.notifyDataSetChanged();
        }
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View inflate = LayoutInflater.from(parent.getContext()).
                    inflate(R.layout.gwc_fragment_item, null);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            inflate.setLayoutParams(layoutParams);
            return new GwcAdapter.ViewHolder(inflate);
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            holder.setIsRecyclable(false);
        }

        @Override
        public int getItemCount() {
            return mDataList.size();
        }

        public class ViewHolder extends RecyclerView.ViewHolder {
            public ViewHolder(@NonNull View itemView) {
                super(itemView);

            }
        }
    }
    protected List<String> createDataList(int start) {
        List<String> strings = new ArrayList<>();
        for (int i = start; i < start + 20; i++) {

            strings.add("第" + i + "个Item");
        }
        return strings;
    }
    /**
     * 第一次加载数据。
     */
    private void loadData() {
        mDataList = createDataList(0);
        mAdapter.notifyDataSetChanged(mDataList);

        mRefreshLayout.setRefreshing(false);

        // 第一次加载数据：一定要掉用这个方法。
        // 第一个参数：表示此次数据是否为空，假如你请求到的list为空(== null || list.size == 0)，那么这里就要true。
        // 第二个参数：表示是否还有更多数据，根据服务器返回给你的page等信息判断是否还有更多，这样可以提供性能，如果不能判断则传true。
        mRecyclerView.loadMoreFinish(false, true);
    }
    /**
     * 加载更多。
     */
    private SwipeRecyclerView.LoadMoreListener mLoadMoreListener = new SwipeRecyclerView.LoadMoreListener() {
        @Override
        public void onLoadMore() {
            mRecyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    List<String> strings = createDataList(mAdapter.getItemCount());
                    mDataList.addAll(strings);
                    // notifyItemRangeInserted()或者notifyDataSetChanged().
                    mAdapter.notifyItemRangeInserted(mDataList.size() - strings.size(), strings.size());

                    // 数据完更多数据，一定要掉用这个方法。
                    // 第一个参数：表示此次数据是否为空。
                    // 第二个参数：表示是否还有更多数据。
                    mRecyclerView.loadMoreFinish(false, true);

                    // 如果加载失败调用下面的方法，传入errorCode和errorMessage。
                    // errorCode随便传，你自定义LoadMoreView时可以根据errorCode判断错误类型。
                    // errorMessage是会显示到loadMoreView上的，用户可以看到。
                    // mRecyclerView.loadMoreError(0, "请求网络失败");
                }
            }, 1000);
        }
    };

    /**
     * 刷新。
     */
    private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mRecyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    loadData();
                }
            }, 1000); // 延时模拟请求服务器。
        }
    };

    /**
     * Item点击监听。
     */
    private OnItemClickListener mItemClickListener = new OnItemClickListener() {
        @Override
        public void onItemClick(View itemView, int position) {
            Toast.makeText(mContext, "第" + position + "个", Toast.LENGTH_SHORT).show();
        }
    };






    @Override
    public void onLazyLoad() {

        //yc
        initView(inflate);
        initData();
//        getData();
    }

    private void initData() {
//        String url =  "http://192.168.1.8:6060/shopordercart/findShopOrderCartList?current=1&size=10";
//        String url = DataManager.BaseUrl_jinlong + "shopordercart/findShopOrderCartList?current=1&size=10";
//        http://192.168.1.8:6066/
        String url = DataManager.BaseUrl_jinlong + "shopordercart/findShopOrderCartList?current=1&size=10";
        HashMap<String, String> headHashMap = new HashMap<>();
        headHashMap.put(DataManager.AuthorizationKey,"Bearer 6d2d2800-c146-4729-81e4-47d168637582");
        DataManager.toServer2(mContext, url, DataManager.GET_TYPE, "", headHashMap, new DataManager.GeResponse(){

            @Override
            public void onResponse(String response) {

                try {
                    GwcBean gwcBean = JSON.parseObject(response, GwcBean.class);
                    List<GwcBean.DataBean.RecordsBean> records = gwcBean.getData().getRecords();
                    System.out.println();
                }catch (Exception e){

                }
            }
        });
    }


}
